package com.csw.scala

object Demo14List {
  def main(args: Array[String]): Unit = {


    /**
      * List集合
      * 有序不唯一
      *
      * 在scala中默认使用不可变的List集合
      */
    val list: List[Int] = List(1, 3, 6, 5, 4, 324, 3, 5)

    println(list)

    //通过下标获取数据
    println(list(2))
    //将集合中的元素通过分隔符拼接成一个字符串
    println(list.mkString("|"))
    //最大值
    println(list.max)
    //最小值
    println(list.min)
    //求和
    println(list.sum)
    //获取长度
    println((list.length + list.size) / 2)
    //获取第一个元素
    println(list.head)
    //获取最后一个元素
    println(list.last)
    //获取前几个元素，会返回一个新的集合
    println(list.take(3))
    //取出不包含第一个元素的所有元素
    println(list.tail)
    //反转集合，返回一个新的集合
    println(list.reverse)
    //判断是否为空
    println(list.isEmpty)
    //去重
    println(list.distinct)

    val list1: List[Int] = List(4, 5, 6, 1, 2, 3, 6, 8, 9)

    /**
      * map函数，对集合中的元素进行处理，将集合中的元素一个一个的传递给后面的函数
      * 处理完了之后返回一个新的集合
      *
      * 数据的对应关系是一对一
      */
    val x = list1.map((i: Int) => i.toString + "csw")
    println(x )

    /**
      * filter函数：对集合中的元素进行过滤
      * 将集合中的元素传递给后面的函数，如果函数最终返回true则保留元素，返回false则过滤元素
      *
      * 返回一个新的集合，新的集合类型和原集合一致
      *
      */

      //过滤出集合中大于5的元素
    val x1 = list1.filter((i: Int) => i > 5)
    println(x1)

    /**
      * sortBy：指定一个排序的列对数据进行排序，默认是升序
      */
    val x2= list1.sortBy((i: Int) => i)
    println(x2)

    /**
      * sortWith: 传入一个比较规则
      *
      */
    val x3 = list1.sortWith((x: Int, y: Int) => x > y)
    println(x3)

    /**
      * flatMap函数，将集合中的元素压扁，一行变多行
      *
      * 数据的对应关系是一对多
      *
      * map函数需要的参数也是一个函数，函数的返回值必须是一个集合或者数组
      *map函数会将返回的集合压扁
      */
    val list2: List[String] = List("java,spark,hadoop", "spark,ava,hive", "hive,hbase")

    val x4= list2.flatMap((s: String) => s.split(","))


    println(x4)//List(java, spark, hadoop, spark, ava, hive, hive, hbase)
  }
}
